#ifndef _bdc_h
#define _bdc_h

#include "headerfile.h"
#include "main.h"
/******************************************************************************************/

/******************************************************************************************/
//extern short encoderPulse[4];
//extern float MotorSpeed[4];
/******************************************************************************************/
//MOTOR_PIN
/* M1 */
#define M1_INA1_Pin                 GPIO_PIN_3
#define M1_INB1_Pin                 GPIO_PIN_15
#define M1_INA1_GPIO_Port           GPIOB
#define M1_INB1_GPIO_Port           GPIOA
/* M2 */   
#define M2_INA2_Pin                 GPIO_PIN_4
#define M2_INB2_Pin                 GPIO_PIN_5
#define M2_GPIO_Port                GPIOB
/* M3 */
//#define M3_INA3_Pin                 GPIO_PIN_2
//#define M3_INB3_Pin                 GPIO_PIN_8
//#define M3_INA3_GPIO_Port           GPIOE
//#define M3_INB3_GPIO_Port           GPIOB
///* M4 */
//#define M4_INA4_Pin                 GPIO_PIN_9
//#define M4_INB4_Pin                 GPIO_PIN_5
//#define M4_GPIO_Port                GPIOB
#define Ain1(x)   do{ x ? \
                      HAL_GPIO_WritePin(M1_INA1_GPIO_Port, M1_INA1_Pin, GPIO_PIN_RESET) : \
                      HAL_GPIO_WritePin(M1_INA1_GPIO_Port, M1_INA1_Pin, GPIO_PIN_SET); \
                  }while(0)
#define Ain2(x)   do{ x ? \
                      HAL_GPIO_WritePin(M1_INB1_GPIO_Port, M1_INB1_Pin, GPIO_PIN_RESET) : \
                      HAL_GPIO_WritePin(M1_INB1_GPIO_Port, M1_INB1_Pin, GPIO_PIN_SET); \
                  }while(0)
#define Bin1(x)   do{ x ? \
                      HAL_GPIO_WritePin(M2_GPIO_Port, M2_INA2_Pin, GPIO_PIN_RESET) : \
                      HAL_GPIO_WritePin(M2_GPIO_Port, M2_INA2_Pin, GPIO_PIN_SET); \
                  }while(0)
#define Bin2(x)   do{ x ? \
                      HAL_GPIO_WritePin(M2_GPIO_Port, M2_INB2_Pin, GPIO_PIN_RESET) : \
                      HAL_GPIO_WritePin(M2_GPIO_Port, M2_INB2_Pin, GPIO_PIN_SET); \
                  }while(0)
//#define Cin1(x)   do{ x ? \
//                      HAL_GPIO_WritePin(M3_INA3_GPIO_Port, M3_INA3_Pin, GPIO_PIN_RESET) : \
//                      HAL_GPIO_WritePin(M3_INA3_GPIO_Port, M3_INA3_Pin, GPIO_PIN_SET); \
//                  }while(0)
//#define Cin2(x)   do{ x ? \
//                      HAL_GPIO_WritePin(M3_INB3_GPIO_Port, M3_INB3_Pin, GPIO_PIN_RESET) : \
//                      HAL_GPIO_WritePin(M3_INB3_GPIO_Port, M3_INB3_Pin, GPIO_PIN_SET); \
//                  }while(0)
//#define Din1(x)   do{ x ? \
//                      HAL_GPIO_WritePin(M4_GPIO_Port, M4_INA4_Pin, GPIO_PIN_RESET) : \
//                      HAL_GPIO_WritePin(M4_GPIO_Port, M4_INA4_Pin, GPIO_PIN_SET); \
//                  }while(0)
//#define Din2(x)   do{ x ? \
//                      HAL_GPIO_WritePin(M4_GPIO_Port, M4_INB4_Pin, GPIO_PIN_RESET) : \
//                      HAL_GPIO_WritePin(M4_GPIO_Port, M4_INB4_Pin, GPIO_PIN_SET); \
//                  }while(0)

#define TIM4_ARR 7200.0f
/******************************************************************************************/
void GetEncoderPulse(void);
float CalActualSpeed(int pulse);
void GetMotorSpeed(void);
int myabs(int p);
void Set_PWM(float moto1,float moto2, float moto3,float moto4);
void Motor_AllStop(void);
void Encoder_Start(void);
void PWM_Start(void);

				  
				  
#endif
















